package com.mj.listen1._10_Map映射.map;

/**
 * Map接口
 *
 * @param <K>
 * @param <V>
 */
public interface Map<K, V> {
    int size();

    boolean isEmpty();

    void clear();

    /**
     * 添加元素
     *
     * @param key
     * @param value
     * @return
     */
    V put(K key, V value);

    V get(K key);

    V remove(K key);

    /**
     * 查找key是否存在
     *
     * @param key
     * @return
     */
    boolean containsKey(K key);

    /**
     * 查找value是否存在
     *
     * @param value
     * @return
     */
    boolean containsValue(V value);

    /**
     * 元素遍历
     *
     * @param visitor
     */
    void traversal(Visitor<K, V> visitor);

    public static abstract class Visitor<K, V> {
        boolean stop;

        public abstract boolean visit(K key, V value);
    }
}
